Method and system for community data caching

ABSTRACT

A cache module ( 26 ) at a client computer ( 12 ) controls a cache portion ( 28 ) on a storage device ( 24 ). The cache module communicates with other cache modules at other clients to form a cache community ( 15 ). The cache modules store World Wide Web or other content in the cache portions for retrieval in response to requests ( 32 ) for content from browsers ( 30 ) in the cache community. When the requested content is not available in the cache community, the requested content may be retrieved from an origin server ( 19 ) using the Internet.

CROSS REFERENCE TO RELATED APPLICATIONS

This application is a continuation application of U.S. patentapplication Ser. No. 09/759,392 filed Jan. 12, 2001, now U.S. Pat. No.7,035,911, which is hereby incorporated herein by reference.

TECHNICAL FIELD OF THE INVENTION

This invention relates in general to the field of data processingsystems and, more particularly, to a method and system for communitydata caching.

BACKGROUND OF THE INVENTION

As computers have grown increasingly important in today's society, theimportance of the Internet has also increased. As increasing numbers ofusers access the Internet, the need for efficient use of bandwidth hasalso increased. The increasing numbers of requests handled by theInternet are increasing the delay experienced by a user betweengenerating a request and receiving a response to the request because ofbandwidth limitations.

One traditional solution to decreasing bandwidth usage and decreasingthe delay experienced by the user has involved caching previouslyrequested content at the user's computer for faster retrieval. A relatedtraditional solution has involved caching previously requested contentfor multiple users at a single cache server. Another traditionalsolution has involved increasing the bandwidth of the network connectionbetween the Internet, the user and the web servers handling therequests. However, traditional solutions have often failed as the numberof requests continue to increase and overload single cache servers andbecause of the expense associated with maintaining large numbers of highspeed connections to the Internet. In addition, the traditionalsolutions have not utilized the “always-on” nature of newer broadbandconnections such as digital subscriber line and cable modems.

SUMMARY OF THE INVENTION

From the foregoing, it may be appreciated that a need has arisen for amethod and system for community data caching to provide more efficientuse of bandwidth.

According to one embodiment of the present invention, a method forcommunity data caching is presented. The method comprises intercepting arequest for content at a cache module and determining a cache shareresponsible for the request. The cache share is associated with a cachecommunity. The method further comprises determining whether the contentassociated with the request is available at the cache share andretrieving the content associated with the request from the cache sharewhen the content associated with the request is available at the cacheshare. The method further comprises retrieving the content associatedwith the request from an origin server when the content associated withthe request is unavailable at the cache share and storing the contentassociated with the request retrieved from the origin server at thecache share.

The present invention provides a number of technical advantages. Onesuch technical advantage is the capability to support a distributedcaching system. In addition, the distributed caching system issupportable without the use of specialized hardware as standard personalcomputers may be used to support the distributed caching system. Afurther technical advantage is decreased utilization of expensiveconnections to the Internet and increased utilization of cheaper localarea network connections and broadband connections, such as digitalsubscriber line and cable modems. By caching content at local machineson a local area network or on broadband connections to an InternetService Provider, response time to requests for content is decreased byretrieving the content from local machines. Additional benefits may berealized by allowing more client machines to utilize a single connectionto the Internet by decreasing the amount of bandwidth needed byparticular client machines.

BRIEF DESCRIPTION OF THE DRAWINGS

A better understanding of the present invention will be realized fromthe detailed description that follows, taken in conjunction with theaccompanying drawings, in which:

FIG. 1 is a block diagram illustrating a community cache system;

FIG. 2 is a block diagram illustrating an exemplary community cacheconstructed according to the teachings of the present invention;

FIG. 3 is a flowchart illustrating a method for community cachingaccording to the teachings of the present invention;

FIG. 4 is a flowchart illustrating a method for generating a communitycache according to the teachings of the present invention;

FIG. 5 is a diagram illustrating an exemplary distribution of cacheshares according to the teachings of the present invention;

FIG. 6 is a block diagram illustrating a dynamic caching systemaccording to one embodiment of the system of FIG. 1;

FIG. 7 is a block diagram illustrating details of the dynamic cacheapplication according to one embodiment of the present invention;

FIG. 8 is a flow diagram illustrating a method for retrieving andcaching content within a cache community according to one embodiment ofthe present invention;

FIG. 9 is a flow chart illustrating a method for adding a client to thecache community according to one embodiment of the present invention;

FIG. 10 is a flow chart illustrating a method for allowing the client tojoin the cache community according to one embodiment of the presentinvention;

FIG. 11 is a flow chart illustrating a method for determining whether amember of the cache community has unexpectedly departed the cachecommunity according to one embodiment of the present invention;

FIG. 12 is a flow chart illustrating a method for gracefully removingthe member from the cache community according to one embodiment of thepresent invention;

FIG. 13 is a flow chart illustrating a method for gracefully removing amaster from the cache community according to one embodiment of thepresent invention; and

FIG. 14 is a flow chart illustrating a method for allowing the master tounexpectedly depart the cache community according to one embodiment ofthe present invention.

DETAILED DESCRIPTION OF THE INVENTION

FIG. 1 is a block diagram illustrating a community cache system 10.System 10 comprises one or more Internet Service Provider (ISP) clients12, an ISP 14, an ISP caching community 15, a network 16, an Intranetcaching community 18 and an origin server 19.

Client 12 comprises a processor 20, a computer readable memory 22, acomputer readable storage device 24, a cache module 26 and a browser 30.Client 12 may be adapted to execute any of the well-known MS-DOS,PC-DOS, OS/2, UNIX, Linux, MAC-OS, mainframe, minicomputer and Windowsoperating systems or other operating systems. Processor 20 comprises anysuitable general purpose or specialized electronic processing device,such as a central processing unit (CPU), operable to communicate withmemory 22 and storage device 24, and further to execute cache module 26and browser 30. Memory 22 comprises any suitable combination oftransient or persistent memory operable to store cache module 26 andbrowser 30, and to communicate with processor 20. Storage device 24comprises any suitable combination of optical, magnetic or othercomputer readable storage medium such as a floppy disk drive, a harddisk drive, a CD-ROM drive, a CD-RW drive, a magnetic tape drive or anoptical drive. Storage device 24 may also represent multiple computerreadable storage devices. Storage device 24 includes a cache portion 28.

Cache portion 28 comprises a portion of storage device 24 used by cachemodule 26 for caching data. Access to cache portion 28 may be controlledby cache module 26 so as to prevent user modification of data stored incache portion 28. Cache portion 28 may comprise one or more directories,one or more logical partitions, one or more distinct physical devicesand other suitable physical and logical elements.

Cache module 26 comprises a software application operable to managecache portion 28 of storage device 24. Cache module 26 is operable tomonitor the activities of browser 30 and to cache content itemsretrieved by browser 30. Cache module 26 is also operable to respond tocontent requests from browser 30 using content cached in cache portions28 at clients 12 in community 15. In one embodiment, cache module 26 mayuse the Cache Array Routing Protocol (CARP) to determining the locationof content within community 15. Cache module 26 is configurable suchthat limits may be placed on the size of cache portion 28 and the amountof processor time used on processor 20 by cache module 26. For example,a user associated with a client 12 may configure the cache module 26associated with that client 12 to use only 5% of the storage space andno more than 10% of the processor time. For another example, a userassociated with a client 12 may configure the cache module 26 associatedwith that client 12 to only provide caching services when the system isidle, such as when a screen saver is active or when processor usage bythe user of the client 12 is below a particular threshold. In general,resource limits may be associated with cache module 26 such that cachemodule 26 is prevented from consuming more than a predetermined amountof the resource. The resources may comprise any of an amount ofprocessor time on processor 20, an amount of bandwidth on link 13, anamount of storage space on storage 24, an amount of memory 22 and othercomputing resources associated with client 12. Cache module 26 isfurther operable to collect statistical information associated with link13, browser 30, client 12, portion 28, cache module 26 and otherelements in community 15.

Cache module 26 is further operable to encrypt data stored in cacheportion 28. Cache module 26 may use any suitable symmetric and/orasymmetric encryption system for encrypting data in cache portion 28.For example, cache module 26 may use public-key/private-key encryption,the U.S. Data Encryption Standard (DES), the Twofish algorithm, theBlowfish algorithm and other suitable encryption systems. Encryptingdata stored in cache portion 28 prevents a user associated with client12 from unrestrictedly accessing and modifying cached content.Encryption also provides privacy as the user of any particular client 12in community 15 is prevented from viewing the data retrieved by otherusers in community 15.

The increasing use of “always-on” Internet connections with largebandwidth capacities allows for the use of a distributed caching systemusing non-specialized equipment. Note that as used herein, an“always-on” connection is defined as a data connection between a clientcomputer, such as a personal computer, and a network, such as theInternet, which operates without competing with other devices associatedwith a user of the client computer. In addition, an “always-on”connection as used herein may be off and may cycle between being on andoff at unpredictable intervals. Stated another way, an “always-on”connection has the capability to be continuously active withoutinterfering with other devices usable by the user associated with theclient computer, but the “always-on” connection is not required to beliterally “always-on”. For example, a traditional analog modem istypically active only when a user of the modem explicitly activates theanalog modem and prevents the use of the phone line by the user of theanalog modem for voice communication when the analog modem is active.Typically, an analog modem is not considered as creating an “always-on”connection. For another example, a digital subscriber line (DSL) modem,a cable modem and a local area network (LAN) have the capability to becontinuously active without interfering with the use of the phone lineor the cable television while active. Typically, a DSL modem, a cablemodem and a LAN would be considered as creating “always-on” connection.

The growing availability of “always-on” connections provides theopportunity to utilize the processing power and storage capacity ofcomputers connected via “always-on” connections to the Internet or othernetworks. Many computers with “always-on” connections utilize only asmall portion of their processing power and storage space. For example,many DSL and cable modem connected personal computers remain completelyunused during the day when their owner is at work and this unusedprocessing and storage capacity may be used to form a distributedcaching system. In addition, even when being used, many computers with“always-on” connections may have significant unused storage andprocessing capability. System 10 provides the capability to harness theunused processing power and storage capacity of standard computers tocreate a distributed caching system.

In return for the use of processing power and storage capacity oncomputers to form the distributed caching system, a provider of system10 may provide incentives to the users of clients 12. For example, anISP, such as 14, may deploy cache modules 26 to subscribers of the ISPin return for a lower subscription cost. For another example, an ISPcould use system 10 as part of a value-added service of faster internetservice.

Each cache module 26 is further operable to generate a cache statusmessage 27. Cache status message 27 comprises a indication of whether aparticular cache module 26 is active or inactive. More specifically,cache status message 27 includes a “cache on” or a “cache off”indication. The “cache on” indication indicates that the associatedcache module 26 has gone from an inactive to an active state and isrequesting to join community 15. The “cache off” indication indicatesthat the associated cache module 26 is going from an active to aninactive state and is requesting removal from community 15. Cache statusmessage 27 may also include an “active” indication. The activeindication indicates that the associated cache module 26 is currentlyactive, and caching content and handling requests for content frombrowsers 30. The active indication may operate as a heartbeat indicatingthat the associated cache module 26 is alive.

Each cache module 26 further comprises a distinct location table 29.Location table 29 comprises one or more indications of the locationwithin community 15 of cached content. More specifically, location table29 indicates which client 12 is responsible for caching which content.In general, table 29 may use any suitable indication for indicatingwhich clients 12 to cache content at, such as IP addresses, domainnames, portions of URLs or a hash value based on a content request frombrowser 30.

Cache modules 26 may be further operable to provide increased anonymitywhile surfing to users of clients 12. More specifically, cache module 26may remove specific lines in HTTP requests, such as requests 32, sent toretrieve web pages from origin server 19. This feature assists inpreventing the sending of certain personal information to origin servers19. For example, browser 30 typically requests a web page from originserver 19 by generating a request 32. Request 32 may include a headerportion that may include information about client 12 and the associateduser, such as an email address and what web sites that the user hasvisited. Cache module 26 may intercept request 32 and remove parts ofthe header portion which are not required to retrieve web pages. In oneembodiment, cache module 26 comprises a Microsoft Windows application.The cache module 26 is operable to collect statistics such as the numberof cache hits, the number of requests received by cache module 26, thehit percentage, the amount of data cached, the maximum capacity of cacheportion 28, and how long cache module 26 has been active. Cache module26 may also allow a user to configure various aspects of cache module26, such as the size of cache portion 28, enable or disable anonymoussurfing and purge cache portion 28.

Browser 30 executes on client 12 and comprises any suitable HypertextTransport Protocol (HTTP) client. In the disclosed embodiment, browser30 comprises a web browser such as Internet Explorer® by Microsoft Corp.of Redmond, Wash., or Netscape Communicator by Netscape CommunicationsCorp. Browser 30 is held in memory 22 and executed by processor 20.Browser 30 transmits and receives data over link 13. Each browser 30 isoperable to generate one or more content requests 32. Each request 32 isgenerated by a particular browser 30 in response to a desire forinformation by a user (not shown) associated with that particularbrowser 30. Each request 32 comprises a request for one item of contentfrom origin server 19. In the disclosed embodiment, request 32 comprisesan HTTP request. The HTTP request comprises a Uniform Resource Locator(URL) portion identifying the requested item of content and a headerportion containing further information about the HTTP request. Therequested item of content may further comprise multiple elements ofcontent, for example, a web page with multiple graphic elements therein,but the request is directed to retrieving the single content itemassociated with the URL while the remaining elements of content in themain content item are retrieved as a function of the single contentitem.

Content comprises static information and dynamic information. Staticinformation typically does not change once the content has been createdor does not change except slowly over time. Stated another way, staticinformation comprises content that, when created, is expected to remainthe same for an indeterminate amount of time. Static information maycomprise, for example, text files and pre-existing Hypertext MarkupLanguage (HTML) web pages. For example, a restaurant menu is the sameregardless of the user who is accessing the menu because the menu is thesame for all people. However, as chefs at the restaurant change overtime, the menu may also change.

In contrast, dynamic information comprises content that is expected anddesigned to change. The dynamic content may change based on the data andcriteria used for generating the dynamic content, such as a searchresult page. For example, a search for “mountain lions” will dynamicallygenerate a search result page listing items related to “mountain lions.”The dynamic content may also change based on information associated withthe page, for example, a page in an online product catalog may change inresponse to pricing and availability changes, and dynamic content mayfurther change for other suitable reasons. Dynamic information maycomprise, for example, the output of Common Gateway Interface (CGI)scripts, search engine results, the output of Structured Query Language(SQL) searches and the SQL search itself, JavaScript, the output ofJavaScript scripts, ActiveX controls and the output of ActiveX controls,Active Server Pages, applets and any other suitable dynamic contentgeneration system. Often, the dynamic information will be expressed as asingle HTML web page, but the information within the HTML web page hasbeen generated dynamically based on some suitable criteria. For example,the result of a search using a search engine on the Internet returnsdifferent information based on the search terms provided by the user.The search results may also depend on one or more attributes associatedwith the search request, such as geographic location or the currentdate. Continuing the search engine example, when the user is searchingfor local businesses, the search results will vary not only on thesearch terms provided by the user, but also what “local” means withrespect to the search request. For another example, a user searching forinformation about current events will want results that are tailored tothe user's search terms, the user's location, and the current date. Foryet another example, an online book retailer may provide priceinformation and consumer reviews of books available from the online bookretailer. The price information for a particular book may changeunexpectedly in response to a sale or a sudden interest in thatparticular book. Also, the web page listing the book and the consumerreviews changes in response to a consumer entering a new review of thebook.

Referring again to FIG. 1, communications link 13 comprises a datacommunications link operable to communicate data between clients 12 andISP 14. In the disclosed embodiment, link 13 comprises an “always-on”type connection, such as digital subscriber line (DSL) or a cable modem.

ISP 14 comprises a point of presence on network 16 for communicatingdata from clients 12 to remote locations. ISP 14 may also define theboundary of community 15.

Community 15 comprises a plurality of clients 12 at whom content itemsretrieved by browsers 30 may be cached in cache portions 28. Community15 represents a group of clients 12 which cooperate to form adistributed caching system using cache module 26 and portion 28.Requests by browsers 30 within community 15 for content cached withincommunity 15 do not need to be propagated over network 16 since therequested content is available within community 15.

Network 16 comprises any suitable data transport network, such as aTransmission Control Protocol/Internet Protocol (TCP/IP) network, anasynchronous transfer mode (ATM) network, an Ethernet network, or aframe-relay network. In the disclosed embodiment, network 16 comprisesthe Internet.

Community 18 represents an exemplary cache community based around acorporate Intranet. The distributed caching capabilities of system 10are not limited to home computers. A corporation may utilize cachemodules 26 in order to improve web performance for the corporation'semployees and/or to decrease the amount of Internet connectivity thecorporation purchases. The 10 megabit, 100 megabit, gigabit and fasterLAN technologies used by corporations are well suited to the distributedcache of system 10. LAN technologies may be considered as providing an“always-on” connection within the scope of the present invention. Othercollections of computers may also form cache communities, communities 15and 18 represent two examples of possible cache communities.

Community 18 may comprise a corporate intranet having a communicationsinterface 50, a LAN 52 and a plurality of intranet clients 54. Interface50 comprises a communication interface between LAN 52 and Internet 16.For example, interface 50 may comprise a firewall, a router or othersuitable communications interfaces. Interface 50 may also define theboundary of community 18. LAN 52 comprises any suitable local areanetwork, such as Ethernet, ATM, or TCP/IP. Intranet clients 54 aresimilar to ISP clients 12 except that clients 54 are members of anIntranet. Community 18 operates similarly to community 15, except asotherwise noted.

Origin server 19 communicates data over network 16. Origin server 19comprises any suitable hardware and/or software executing on a computerfor receiving and responding to requests 32. Origin server 19 maycomprise a single computer executing software or may comprise aplurality of computers each executing software. In the disclosedembodiment, origin server 19 comprises an HTTP server which may also beknown as a web server. Origin server 19 may additionally support otherprotocols such as the file transfer protocol (FTP). Origin server 19retrieves information from one or more data sources (not shown), such asa storage device coupled to server 19 or other origin servers, inresponse to requests 32. Origin server 19 is operable to retrieve staticcontent, such as prewritten text files, images, and web pages, from thedata source in response to requests 32. Origin server 19 is alsooperable to generate new, dynamic content, for example, by dynamicallycreating web pages based on content stored in the data source inresponse to requests 32. For example, origin server 19 may generate anew web page using a common gateway interface (CGI) script, generate anew web page from the result of a structured query language (SQL)request and perform other suitable content generation functions. Originserver 19 may also be operable to generate executable software, such asapplications and applets, in response to requests for data. For example,origin server 19 may generate a Java applet in response to anappropriate request 32.

In operation, browser 30 generates request 32 for content. Operation ofsystem 10 will be described with respected to cache community 15,however, it should be noted that cache community 18 operates similarlyusing clients 54. Cache module 26 then intercepts request 32 beforerequest 32 is communicated to network 16. Cache module 26 examinesrequest 32 to determine whether the requested content is available incommunity 15. If the requested content is available in community 15,cache module 26 retrieves the requested content from the appropriatestorage portion 28 within community 15 and returns the requestedinformation to the browser 30 which requested it. If the requestedcontent is not available within community 15, then cache module 26forwards request 32 over link 13 to ISP 14 for normal handling.Similarly, a request 32 generated by a browser on a client 54 isintercepted by cache module 26 to determine whether the requestedcontent is available within community 18.

Cache module 26 may be configured to control the amount of processorpower, storage space and bandwidth of a particular client 12 used bycommunity 15. The client-by-client control of usage available to clients12 allows for individual tailoring of community 15 to particular clients12. The client-by-client control of usage also allows for differentincentive plans for subscribers if ISP 14. For example, a subscriber toISP 14 may have a second computer separate from the computer normallyused by the subscriber. The subscriber with two computers could dedicatea large percentage of processor 20 and storage 24 to community 15 inexchange for ISP 14 providing a second IP address for the secondcomputer over a DSL type link 13 for free. For another example, asubscriber of ISP 14 may dedicate increasing proportions of thebandwidth available over link 13 in return for decreasing subscriptioncosts, such as 40% for a 40% discount or 50% for a 50% discount.Community 18, representing a corporate intranet, may allow forcentralized control of the percentage of the processing power, storageand bandwidth used by community 18, such as by a corporate informationtechnology (IT) department.

In one embodiment, cache module 26 may cache content using aconservative mode or an aggressive mode. When in the conservative mode,cache module 26 caches content received by browser 30 which is marked ascacheable. When in the aggressive mode, cache module 26 caches allcontent unless the content has been explicitly marked as non-cacheable.In general, by caching all content, unless the content is listed asnon-cacheable, more content may be cached in comparison to conservativemode caching.

Cache modules 26 using aggressive mode caching may further includecommunicating with a data center. More specifically, cache module 26 maycommunicate with the data center to inform the data center of datacached by cache module 26.

Aggressive mode caching may use a content expiration protocol to avoidproviding expired, but cached, content. The data expiration protocol mayuse data expiration commands to inform cache modules 24 that data at anorigin server 19 has changed. Alternatively, a single cache modulewithin a community 15, such as the master node discussed below, maycommunicate with the data center. By informing the data center of datacached within community 15, the data center can send data expirationcommands to community 15 so that cache modules 24 can mark cachedcontent as expired.

The data expiration command comprises any suitable message for expiringdata stored by cache module 24. In one embodiment, the data expirationcommand comprises an Internet Cache Synchronization Protocol (ICSP)message. The ICSP message may expire any of a single web page, aplurality of web pages at a single web site, a plurality of web pages ata plurality of web sites, a plurality of sites within a single domainand one or more specific objects on a web page, such as an image. Forexample, the ICSP message may expire a single web page such ashttp://www.domain.com/web_page.html. The ICSP message may expire aplurality of web pages at a single web site such ashttp://www.domain.com/web_pages/* which would expire all web pages inthe “web_pages” directory at the site www.domain.com. The ICSP messagemay expire a plurality of pages at a plurality of web sites such ashttp://*.domain.com/web_pages/* which would expire all web pages in the“web_pages” directory of each site in “domain.com”. The ICSP message mayexpire a plurality of web sites such as http://*.domain.com which wouldexpire all web pages on all sites in “domain.com”. For another example,a single active server page (ASP) may result in many individual cachedpages. A single ASP page may generate large numbers of individual cachedpages because a single ASP page can dynamically create multipledifferent specific pages, such ashttp://www.domain.com/product_description.asp?category=_(——)&product=_(——)mayspecify an ASP page that generates many specific product descriptionpages based on a specified category and product. To cache module 24,product_description.asp?category=5&product=7,product_description.asp?category=5&product=6 andproduct_description.asp?category=3&product=7 may specify three differentcached pages. By expiring product_description.asp?category=*&product=7ALL categories of product seven are expired, while not affecting productsix related pages even though all of the pages were generated from asingle ASP page.

In general, the data center may generate the data expiration command inresponse to a change in the content at origin server 19. The data centermay also generate the data expiration command in response to theelapsing of a predetermined time period. ICSP supports thesynchronization of cached content in community 15 with updated contentavailable at origin server 19. Further details of ICSP are described inthe patent application entitled “Method and Apparatus for ContentSynchronization” by inventors Keith A. Lowery, et al., filed on Jun. 8,2000, patent application Ser. No. 09/590,760, which is incorporatedherein by reference.

In addition, cache module 26 may provide a guaranteed click deliverycapability. The guaranteed click delivery capability comprises thecapability to regularly check whether a particular web page is availableand to retrieve the web page when the web page becomes available. Forexample, a user of client 12 may attempt to retrieve a particular webpage. The server providing that web page may be currently overloaded andunable to provide the requested web page. Cache module 26 may detectthat the server is too busy, such as when the web site returns a “servertoo busy” error message, and then automatically attempt to retrieve therequest web page from the busy server. For example, a busy server maycomprise a server which is currently processing substantially all therequests 32 which the server is capable of handling. For anotherexample, a busy server may comprise a server which is providing contentand using substantially all of the bandwidth available to the server. Ingeneral, a busy server may comprise a server which is incapable ofprocessing more requests 32 at a given time for one or more reasons.Cache module 26 may then display the retrieved web page in browser 30 ormay abandon the attempt to retrieve the web page after a predeterminedperiod of time has elapsed without successfully retrieving the requestedweb page. Cache module 26 may also ask the user whether the user wantscache module 26 to attempt to retrieve the requested web page from thebusy server. Typically, cache module 26 would attempt to retrieve therequested web page from the busy server while the user retrieves andviews other web pages from other origin servers 19. Stated another way,cache module 26 would attempt to retrieve the requested web page in thebackground while the user may also be performing other tasks.

Yet another capability of cache module 26 is the ability to provide ascreen saver to a user associated with client 12. The screen saverdisplays a graphical representation of the user's response time to oneor more origin servers 19. For example, the response time between client12 and a particular web site may be displayed in a graphical manner.More specifically, the screen saver displays a solar system-like graphwith client 12 generally in the center and the distance between client12 and other web sites displayed based on the round-trip ping timebetween client 12 and the other web sites.

FIG. 2 is a block diagram illustrating an exemplary community cache 100.Community 100 comprises a first client 102, a second client 104, a thirdclient 106 and an ISP 108. In the exemplary embodiment of FIG. 2,clients 102, 104 and 106 represent specific examples of clients 12 ofFIG. 1. Clients 102, 104 and 106 communicate with ISP 108 overrespective communication links 110. Client 102 comprises a browser 120,storage 122, and a cache module 124. Client 104 comprises a browser 140,storage 142, and a cache module 144. Client 106 comprises a browser 160,storage 162, and a cache module 164.

Browsers 120, 140 and 160 represent distinct examples of browsers 30 ofFIG. 1. Each of storage 122, 142, and 162 respectively support cacheportions 126, 146, and 166. Storage 122, 142, and 162 represent distinctexamples of storage 24 of FIG. 1. Cache portions 126, 146, and 166represent distinct examples of cache portions 28 of FIG. 1. Cachemodules 124, 144, and 164 support respective location tables 128, 148and 168. Each of cache module 124, 144 and 164 are operable to generaterespective cache status messages 130, 150 and 170. Cache modules 124,144, and 164 represent distinct examples of cache modules 26 of FIG. 1.Location tables 128, 148 and 168 represent distinct examples of locationtable 29 of FIG. 1. Cache status messages 130, 150 and 170 representdistinct examples of cache status message 27 of FIG. 1.

Location tables 128, 148, and 168 respectively comprise one or moreindications of which client 102, 104 or 106 to cache content in responseto requests 32 from browsers 120, 140, and 160. For example, locationtable 128 may indicate that content identified by URLs having a domainname beginning with A-D is cached at client 102, while domain names E-Hare cached at client 104 and domain names H-Z are cached at client 106.For another example, location tables 128, 148 and 168 may indicateparticular ranges of IP addresses to be cached at particular clients102, 104 and 106. In general, tables 128, 148 and 168 may use anysuitable indication for indicating which clients 102, 104 and 106 tocache content at, such as IP addresses, domain names, portions of URLsor a hash value based on request 32.

Cache status messages 130, 150 and 170 each comprise a messagerespectively generated by modules 124, 144 and 164 to indicate to othermodules 124, 144 and 164 that the generating module is activating ordeactivating its caching functionality. For example, when cache module124 at client 102 is activated it may generate a cache status message130 indicating caching is active at client 102.

Communications link 110 comprises any suitable data communicationssystem. In the exemplary embodiment of FIG. 3, communications link 110comprises a “always-on” link, such as DSL or a cable modem, similar tolink 13 in FIG. 1. ISP 108 comprises an Internet service provideroperable to communicate data between clients 102, 104 and 106 andnetwork 16 similar to ISP 14 of FIG. 1.

In operation, in one embodiment, community 100 may be formed bydynamically seeking out other active instances of cache module 26. Then,based on a set of performance heuristics, clients 12 are bonded togetherunder favorable conditions. Cache module 26 may use dynamic affiliationalgorithms to build and manage communities 100. More specifically, onstartup, cache module 26 may communicate with a remote directoryprovider for assistance in finding other cache modules 26 with which toform a community 100. Using the assistance from the remote directoryprovider, the client may attempt to contact and possibly join acurrently existing community 100. If no communities 100 are found orfound communities 100 do not allow cache module 26, then cache module 26may attempt to start its own cache community. Alternatively, if noremote directory is available, cache module 26 searches for communities100 itself. For example, cache module 26 may send a broadcast and/or amulticast message looking for communities 100.

Each community 100 includes a master node and, optionally, one or morenormal nodes. A master node comprises a cache module 26 on a particularclient 12 which is responsible for supervising the addition anddeparture of clients from community 100. The master node receives dataassociated with the addition of a client 12 to community 100 and thedeparture of a client 12 from community 100 and communicates the data tothe other members of community 100. Any cache module 26 may function asthe master node. Any suitable method for electing the master node may beused by cache modules 26. For example, a cache module 26 which has beenactivated the longest may be selected as the master, with ties beingresolved randomly. The departure of the master node causes the electionof a new master node by the remaining members of community 100.

Community 100 handles the graceful and non-graceful departure of clients12 from community 100. A graceful departure comprises an intentionaldeparture of a client 12 from community 100. For example, a gracefuldeparture may occur when a user deactivates cache module 26. Anon-graceful departure comprises an unexpected departure of a client 12from community 100. For example, a non-graceful departure may occur whena client 12 suddenly crashes and ceases operation. When an active cachemodule 26 shuts down, for example, the cache module 26 requests to leavecommunity 100 and the request circulates through the remaining communitymembers. The remaining community members would then discontinueforwarding requests to that client 12. In a non-graceful scenario, amanaging peer (known as a Master) watches for dead peers and notifiesthe rest of a community if this condition is detected.

Similarly, the managing peer may depart gracefully or non-gracefully. Agraceful departure of the managing peer comprises the managing peerinforming community 100 that the managing peer is leaving community 100.An election is then held by the remaining members of the peer to selectthe new managing peer. When a non-graceful departure occurs, such aswhen the managing peer crashes, a cache module 26 may detect that themanaging peer is not responding and call an election to create a newmanaging peer. In general, any suitable techniques may be used to handlethe arrival and departure of cache modules 26 from community 100, and tocreate and maintain the managing peer.

FIG. 3 is a flowchart illustrating a method for community caching. Forincreased clarity, the operation of the exemplary cache community 100 ofFIG. 2 will be described in association with FIG. 3. The method beginsat step 200 where browser 120 generates a request 32 for content. TheURL portion of the request 32 identifies the requested content as“http://www.server.com/jobs/listing.html”. Next, at step 202 module 124intercepts request 32 generated by browser 120. Then, at step 204, cachemodule 128 determines the URL associated with request 32.

Proceeding to step 206, cache module 124 determines the location wherethe content associated with the URL associated with request 32 would becached. More specifically, cache module 124 determines which of thestorage portions 126, 146 or 166, would store the requested contentbased on information in location table 128. In the example of FIG. 2,location table 128 indicates that the domain “server.com” would becached at client 106. Next, at step 208, cache module 124 checks storageportion 166 for the requested content and at decisional step 210,determines whether the requested content has been cached. Morespecifically, cache module 124 queries cache module 164 to determinewhether the content associated with the URL in request 32 has beencached in portion 166 at client 106. If cache module 164 replies thatthe requested content is cached in portion 166, then the YES branch ofdecisional step 210 is followed to step 212 where the requested contentis retrieved from storage portion 166 and, at step 214, is displayed atbrowser 120.

If the requested content is not cached at portion 166, indicating thatthe requested content is not available within community 100, then the NObranch of decisional step 210 leads to step 216. At step 216, therequested content is retrieved from origin server 19 since the requestedcontent is not cached within community 100. The requested content isthen displayed on browser 120 at step 214 and, at step 218, a copy ofthe requested content is communicated to cache module 164 for storage inportion 166. Then, at step 220, the retrieved content is stored inportion 166 by module 164.

Returning to the start state of FIG. 3, steps 230 and 232 are typicallyperformed in parallel to the processing previously described for FIG. 3.At step 230, modules 26 generate cache status messages 27 with an“active” indication and broadcast messages 27 to clients 12 (or 54) incommunity 15 (or 18). Message 27 with an “active” indication may be usedby modules 26 to indicate that the associated cache module 26 is alive.Then, at step 232, modules 26 wait a predetermined period of time beforebroadcasting another message 27. Modules 26 wait so as not to floodcommunity 15 (or 18) with messages 27 and waste bandwidth. In oneembodiment, the predetermined wait period is five seconds. Modules 26which fail to broadcast the “active” indication may be removed from thecache community because the associated cache module 26 may have failed,other suitable actions may be taken in response to a failure tobroadcast the “active” indication.

The method described by FIG. 3 is shown to end after steps 214 and 220,this indicates that the processing for the request generated in step 200has been completed. The method described by FIG. 3 is expected to berepeated a plurality of times within the scope of the invention.

FIG. 4 is a flowchart illustrating a method for generating a cachecommunity, such as 15, 18 or 100. For increased clarity, the exemplarycommunity 100 of FIG. 2 is discussed in association with FIG. 4. Themethod begins at step 300 where cache module 144 is initiated.Initiating module 144 may comprise activating module 144, such as byactivating client 104. Next, at step 302, cache module 144 generatescache status message 150 with a “cache on” indication and broadcastscache status message 150 to clients 102 and 106 in community 100.Message 150 may be broadcast using any suitable method supported by ISP108 and links 110. For example, a TCP/IP broadcast or multicast messagemay be used to reach clients 102 and 106 associated with ISP 108. Foranother example and referring back to FIG. 1, community 18 may use anEthernet broadcast message to reach all clients 54 in community 18.

At step 303, a primary distribution of portions of content to be cached(“cache shares”) is negotiated between modules 124, 144 and 164 withincommunity 100. The primary distribution of cache shares may bedetermined by splitting up URLs alphabetically by domain name, bygenerating a unique hash value for each URL and distributing the hashvalues among clients 102, 104 and 106, by IP address range or by anyother suitable method or combination of methods. The distribution methodto use may be configured for modules 124, 144 and 164, such as by anadministrator. The actual primary distribution of cache shares maycomprise a simple fractional split between the members of a cachecommunity, such as 15, 18 (FIG. 1) or 100, or may also consider otherelements. For example, the actual distribution may consider the speed oflinks 13 (FIG. 1) or 110, the processing power of processors 20 (FIG. 1)and/or the size of portions 28 (FIG. 1), 126, 146 and 166. Historicaland statistical information may be considered when determining theprimary distribution. For example, a particular client, such as 12 or54, which regularly reboots may receive a smaller a cache share than aclient which has a historically high up time.

With respect to the example in FIG. 2, modules 124 and 164 may havealready negotiated cache shares based on an alphabetical distributionwhere URLs having domains starting with A-M are cached at client 102 anddomains starting with N-Z are cached at client 106. Modules 124, 144 and164 may now renegotiate cache shares such that A-H domains are cached atclient 102, I-P domains are cached at client 104 and Q-Z domains arecached at client 106 using a simple fractional alphabetic distribution.

Proceeding to step 304, a secondary distribution may optionally benegotiated. For increased reliability, cache modules 26 may beconfigured to negotiate the secondary distribution. The secondarydistribution represents a distribution of cache shares to decrease theimpact of the failure of clients 12. The secondary distribution may bedetermined using any of the information and methods used in determiningthe primary distribution in step 303. For example, cache modules maynegotiate a secondary distribution of cache shares such that multipleclients 12 are caching the same content so that if a particular client12 fails, a backup of the cached content exists within the community.

FIG. 5 is a diagram illustrating an exemplary distribution of cacheshares. For increased clarity, FIG. 5 is discussed in association withFIGS. 2 and 4. The primary distribution of cache shares describedpreviously in associated with step 303 is shown in FIG. 5 as “primary”where domains A-H were allocated to client 102, domains I-P wereallocated to client 104 and domains Q-Z were allocated to client 106. Anoverlapping secondary distribution may be used to allocate portions ofthe primary distribution to other clients for increased reliability. Forexample, an overlapping secondary distribution may allocate I-L and Q-Uto client 102, A-D and V-Z to client 104 and E-H and M-P to client 106as shown in the “secondary” line of FIG. 5. Alternatively, the secondarydistribution may simply rotate cache shares, such as having A-Hallocated to client 106, I-P allocated to client 102 and Q-Z allocatedto client 104 and is shown as “alt. secondary” in FIG. 5. Any suitablesecondary distribution may be used depending on the configuration ofcache modules 26 (FIG. 1), 124, 144 and 164 (FIG. 2). It should be notedthat the cache shares shown in FIG. 5 are provided for increased clarityand are merely exemplary, various other primary and secondarydistributions of cache shares are usable within the scope of theinvention.

In addition, tertiary and further distributions may be negotiated toprovide multiple layers of backup within cache communities 15, 18 and100 at step 304. The determination of how many layers of backup toprovide may be based on the reliability of clients 12, 54 (FIG. 1), 102,104 and 106 (FIG. 2), the delay associated with checking backup cachemodules 26 versus the delay associated with retrieving the data fromorigin server 19, bandwidth considerations with community 15, 18 or 100and other criteria.

Then, at step 305, once the primary, secondary and other distributionsare determined, location tables 128, 148 and 168 are updated to reflectwhich client 102, 104 and 106 is caching which content.

Then, at step 306, any redistribution of previously cached content forsupporting a newly negotiated distribution occurs. Redistribution maycomprise actually copying cached content from one client, such as 12 or54 (FIG. 1), to another, or removing or expiring content no longercached at a particular server. Simply removing the cached items maycause a request that could have been satisfied by the community cache tobe forwarded to the origin server, but avoids the bandwidth usageassociated with copying. The decision whether to copy or remove may beconfigured at modules 124, 144 and 164 and may consider bandwidth usageissues, the amount of content to copy and other criteria. For example,modules 124, 144 and 164 may be configured to perform a copy of cachedcontent with the content comprises less than five megabytes of data andto perform a removal when more than five megabytes of content areinvolved.

Continuing the example of FIG. 2, the distribution has changed such thatdomains starting with I-M, previously cached at client 102, and domainsstarting with N-P, previously cached at client 106, are now being cachedat client 104. Thus, cached content may be moved or copied from clients102 and 106 to portion 146 at client 104.

At state 308, modules 124, 144 and 164 cache content in portions 126,146 and 166 and respond to requests 32 as described in FIG. 3. At state310, modules 124, 144 and 164 may also collect statistical dataassociated with clients 102, 104 and 106. Statistical data may compriseprocessor and/or bandwidth usage, such as with respect to the time ofday, time between crashes or reboots, web surfing habits and any othersuitable statistical information associated with clients 102, 104 and106. The statistical data may be stored by modules 124, 144 and 164 foruse in negotiating distributions and may also be communicated to aremote site. The statistical data may be communicated to the remote sitefor storage and use for marketing and advertising purposes. For example,a corporation may use the statistical information to learn about thesurfing habits of its employees.

Then, at step 312, cache module 168 begins to deactivate and broadcastscache status message 170 indicating “cache off” to clients 102 and 104.Modules 124 and 144 receiving cache status message 170 indicating acache shutdown respond by renegotiating the cache distribution betweenthe remaining active modules 124 and 144. More specifically, modules 124and 144 may redistribute cached content such that domains starting withA-M are cached at client 102, while domains starting with N-Z are cachedat client 104. Location tables 128 and 148 are updated to indicate thenew content distribution. Next, at step 314, the module 164 clearsportion 166. Depending on the configuration of modules 164, clearingportion 166 may include communicating cached content to the remainingclients 102 and 104.

System 10 provides the capability to create a distributed caching systemusing standard personal computers and the cache module software.Previous caching systems have typically been limited to caching at asingle computer, such as the caching performed by web browsers, or haveconcentrated caching efforts at a single firewall or proxy server. Theincreasing adoption of “always-on”, high-bandwidth Internet connections,such as DSL modems, cable modems and LANs, allows for system 10 to groupstandard personal computers to form a cache community in order todecrease response time for content requests. In addition, since thecache modules use the existing storage capacity of the client computers,additional hardware does not need to be purchased for the cachecommunity. Also, corporations may benefit from forming community cachesover their corporate intranet LANs in order to decrease usage ofexpensive wide-area-network connections, such as T-1 lines, to theInternet.

The use of community caches also provides benefits to Internet ServiceProviders (ISPs) by decreasing the amount of data transferred betweenthe ISP and the Internet. Since the community caching takes placeentirely on the subscriber side of the ISP's infrastructure, anincreased number of subscribers can be supported by a given amount ofInternet connection bandwidth. For example, if 25% of the contentrequests from subscribers are handled by the community cache, anapproximately 25% decrease in the use of the ISP's public networkconnection is realized.

FIG. 6 is a block diagram illustrating a dynamic caching system 400comprising one embodiment of system 10. System 400 comprises a cachecommunity 402, a client 404, a cache server 406, Internet 16, and originserver 19. Dynamic distributed caching system 400 provides thecapability for allowing members to dynamically join and leave cachecommunity 402 while continuing to provide a distributed caching system.

Community 402 comprises one or more peers 413. A peer 413 comprises acomputer operable to execute logic and/or an application. Peers 413further comprise a master 410 and a member 412. Community 402, similarto community 15, represents a group of peers 413 which cooperate to forma distributed caching system. Each community 402 includes one or morepeers 413. More specifically, each community 402 includes one master 410and zero or more members 412. A dynamic caching application 478 at eachpeer 413 provides functionality to support the distributed cachingsystem 10.

Master 410 comprises a processor 420 and computer readable storage 422.Master 410 may be adapted to execute any of the well known MS-DOS,PC-DOS, OS/2, UNIX, Linux, MAC-OS, mainframe, minicomputer, Windowsoperating systems or other operating systems. Processor 420 comprisesany suitable general purpose or specialized electronic or otherprocessing device, such as a central processing unit (CPU), operable tocommunicate with storage 422 and execute applications stored in storage422. Processor 420 may comprise multiple processors. Storage 422comprises any suitable combination of transient and/or persistent memoryoperable to store member list 426 and dynamic caching application 428,and to communicate with processor 420. For example, storage 422 maycomprise any suitable combination of optical and/or magnetic storage,such as a floppy disk drive, a hard disk drive, a CD-ROM drive or aCD-RW drive. Storage 422 may also represent multiple computer readablestorage devices in any combination.

Master 410 is operable to generate an allow message 424 and maintain apeer list 426. Allow message 424 comprises a data message sent to client404 to inform client 404 that client 404 is being allowed to joincommunity 402. Allow message 424 may also be sent to client 404 toinform client 404 that entry to community 402 is denied.

Peer list 426 comprises a list of peers 413 in community 402. Forexample, peer list 426 may compromise a list of the Internet protocol(IP) addresses associated with peers 413.

Dynamic caching application 428 comprises software and/or hardwareoperable to support caching of data and other content within community402. Application 428 is described in more detail in FIG. 7.

Member 412 comprises a processor 430, computer readable storage 432 anddynamic caching application 428. Processor 430 comprises any suitablegeneral purpose or specialized electronic processing device, such as aCPU, operable to communicate with storage 432. Processor 430 maycomprise multiple processors. Storage 432 comprises any suitablecombination of transient and/or persistent memory operable to store peerlist 426 and dynamic caching application 428, and to communicate withprocessor 430. For example, storage 432 may comprise any suitablecombination of optical or magnetic computer readable storage mediumssuch as a floppy disk drive, a hard disk drive, a CD-ROM drive, anoptical drive, or a CD-RW drive. Storage 432 may also represent multiplecomputer readable storage devices in any combination.

Community 402 is comprised of a master 410 and zero or more members 412.Members 412 and master 410 operate to support the caching of contentwithin community 402. More specifically, both master 410 and members 402provide for a distributed caching system within community 402. Inaddition to the functionality provided by members 412, master 410 isfurther responsible for providing administrative support to community402. In general, a member 412 is capable of being a master 410 asnecessary and a member 412 may be designated as a master 410 at anytime. Dynamic cache application 428, which executes on both master 410and members 412, is typically fully capable of providing thefunctionality associated with being either a master 410 or a member 412.

Client 404 comprises a processor 440, computer readable storage 442 anddynamic caching cache application 428. Client 404 comprises a computerexecuting dynamic cache application 428 which has not yet joined acommunity 402. Processor 440 comprises any suitable general purpose orspecialized electronic processing device, such as a CPU, operable tocommunicate with storage 442. Processor 440 may comprise multipleprocessors. Storage 442 comprises any suitable combination of transientand/or persistent memory operable to store member list 426 and dynamiccaching application 428, and to communicate with processor 440. Storage442 may further comprise any suitable combination of optical, magneticor other computer readable storage mediums such as a floppy disk drive,a hard disk drive, a CD-ROM drive, an optical drive or a CD-RW drive.Storage 442 may also represent multiple computer readable storagedevices in any combination.

Dynamic cache application 428 is operable to generate a communityrequest 450 and a joined request 452. Community request 450 comprises adata message generated by dynamic cache application 428. Communityrequest 450 requests the network location of communities 402 whichclient 404 may attempt to join. Community request 450 is communicatingto cache server 406.

Join request 452 comprises a data message indicating that client 404wishes to join a particular community 402. Join request 452 iscommunicated to a community 402.

Origin server 19 is further operable to provide content 460. Content 460comprises static and/or dynamically generated information. In oneembodiment, content 460 comprises one or more web pages, such as thoseformatted and linked using the hypertext markup language (HTML). Forexample, content 460 may comprise audio data, video data, text data,animations, applications, applets and other suitable content retrievableusing the hypertext transport protocol (HTTP).

Cache server 406 comprises a processor 470, computer readable storage472, an administration module 474, a community list 476, an expirationmodule 478, and is operable to handle an expiration message 480. Cacheserver 406 comprises one or more servers operable to provide contentexpiration and community tracking capabilities to system 400. Morespecifically, cache server 460 maintains a list of communities 402 whicha client 404 may attempt to join. Processor 470 comprises any suitablegeneral purpose or specialized electronic processing device, such as aCPU, operable to communicate with storage 472. Processor 470 maycomprise multiple processors. Storage 472 comprises any suitablecombination of transient and/or persistent memory operable to storemember list 426 and dynamic caching application 428, and to communicatewith processor 470. Storage 472 may further comprise any suitablecombination of optical, magnetic or other computer readable storagemediums such as a floppy disk drive, a hard disk drive, a CD-ROM drive,an optical drive, or a CD-RW drive. Storage 472 may also representmultiple computer readable storage devices in any combination.

Administration module 474 comprises software and/or hardware operable togenerate and maintain community list 476. Administration module 474 isfurther operable to respond to community request 450 from client 404.

Community list 476 comprises a list of communities 402 known to cacheserver 406 that client 404 may attempt to join. In one embodiment, cacheserver 406 tracks communities 402 which are close to cache server 406 interms of network distance. Typically, on a computer network, geographiclocation is not necessarily a good indicator of response time betweenthat two nodes on a network. The latency between two network nodes isoften a better indication of performance. The latency represents the sumof the time the packet has spent waiting to be forwarded out of aparticular network node plus the transit time over the link connectingone network node to another node. The latency between two networklocations may be used to determine the network distance between the twonetwork locations. Other suitable indications may also be used todetermine network distance, such as the number of hops or nodes betweentwo nodes. Administration module 474 may impose an upper and/or a lowerlimit on the network distance from cache server 406 of communities 402that may be listed in community list 476.

Expiration module 478 comprises software and/or hardware operable toreceive and communicate data expiration messages 480 associated withcontent 460. Expiration message 480 comprises an indication that content460 at origin server 19 has changed and that cached copies of content460 should be marked as stale or out-of-date. Expiration module 478operates to communicate expiration message 480 to communities 402 listedin community list 476.

In operation, dynamic cache application 428 is initiated at client 404.Dynamic cache application 428 then generates a community request 450.Community request 450 is a request for a list of communities 402 thatclient 404 may attempt to join. Community request 450 is communicatedover Internet 60 to cache server 406. In one embodiment, the cacheserver 406 contacted by dynamic cache application 428 has beenpreviously determined, such as a particular URL. Alternatively, cacheserver 406 may be specified by a user associated with client 404. Cacheserver 406 then receives community request 450 and returns communitylist 476 to client 404.

Dynamic cache application 428 then examines community list 476 andselects one of the communities 402 listed in community list 476 toattempt to join. For example, dynamic cache application 428 may select acommunity 402 which has the lowest latency from client 404.Alternatively, dynamic cache application 428 may select the firstcommunity 402 in list 476 or may select a community 402 randomly fromlist 476. In general, dynamic cache application 428 may select acommunity 402 to attempt to join using any suitable technique.

Once dynamic cache application 428 has selected a particular community402 to attempt to join, dynamic cache application 420 generates joinrequest 452 and communicates join request 452 to community 402. Morespecifically, join request 452 is communicated from client 404 to master410 in community 402 since master 410 is responsible for handling theaddition and removal of members 412 from community 402.

Master 410 receives join request 452 and determines whether to allowclient 404 to become a member 412 of community 402. Master 410 may useany suitable criteria to determine whether to allow client 404 to joincommunity 402. For example, master 410 may consider whether the additionof client 404 would exceed the maximum number of members 412 that may bein community 402 and/or whether the round trip transit time for databetween client 404 and members 412 of community 402 is within athreshold limit. The round trip transmission time may comprise the totallength of time a data package from master 410 or members 412 takes totravel to client 404 and return back to the originating master 410 ormember 412. Master 410 may attempt to keep round trip transmission timeswithin a certain threshold so as to avoid degrading the cachingperformance of community 402. If master 410 determines that client 404is appropriate to be a member of community 402, then dynamic cacheapplication 428 at master 410 generates allow message 424 andcommunicates allow message 424 to client 404. When allow message 424indicates that client 404 may join community 402, then dynamic cacheapplication 428 also communicates peer list 426 along with allow message424 to client 404. If allow message 424 indicates that client 404 isallowed to join community 402, then client 404 has joined community 402.

Master 410 then communicates to members 412 that a new member 412 isjoining community 402 by communicating an updated peer list 426 whichincludes client 404. Dynamic cache application 428 then reallocates thecontent 460 to be cached by particular members 412 and master 410 sothat the newly added client 404 is responsible for some subset ofcontent 460 cached in community 402.

If master 410 determines that client 404 should not be allowed to joincommunity 402, then dynamic cache application 428 may generate allowmessage 424 with the indication that client 404 has been denied entry tocommunity 402. Alternatively, dynamic cache application 428 may simplyignore join request 452 and allow client 404 to determine that it hasrejected from community 402 because no response to join request 452 hasbeen received.

If client 404 receives an allow message 424 indicating denial of entryto community 402 or if client 404 does not receive a response frommaster 410 within a predetermined period of time, then dynamic cacheapplication 428 will determine that client 404 has been denied entry tocommunity 402. Dynamic cache application 428 will then select a newcommunity 402 from community list 476 and communicate a join request 452to the newly selected community 402.

When cache server 406 determines that content 460 has changed at originserver 19 or is informed that content 460 has changed at origin server19, cache server 406 generates expiration message 480. Expirationmessage 480 is then sent to each master 410 for each community 402listed in community list 476. Master 410 in community 402 then receivesexpiration message 480 and communicates expiration message 480 tomembers 412 so that expired, cached content 460 is marked as stale orexpired. In one embodiment, expiration message 480 comprises an ICSPmessage. When expired content 460 is cached in community 402 and arequest for the expired content 460 is received, a new copy of content460 is retrieved from origin server 19.

FIG. 7 is a block diagram illustrating details of dynamic cacheapplication 428. Dynamic cache application 428 comprises a cache portion500, an expiration portion 502, and a dynamic affiliation portion 504.

Cache portion 500 comprises software and/or hardware operable to receiveany cached content 460. Cache portion 500 is responsible for managingand organizing the actual cache content on the computer readablestorage, such as storage 422, 432, or 442. Cache portion 500 is furtheroperable to maintain an allocation list 510 when cache application 428is acting as a master 410.

Allocation list 510 comprises an indication of which peer 413 cacheswhich content 460. In one embodiment, allocation list 510 compriseslocation table 148 and the cache shares previously described. Ingeneral, any suitable technique may be used for allocating content 468among peers 413. For example, the CARP protocol may be used to managedistribution of content within community 402.

Expiration portion 502 comprises software and/or hardware operable toreceive expiration messages 480 and mark content stored by cache portion500 as expired. Alternatively, expiration portion 502 may request cacheportion 500 to itself mark content as expired. Expiration portion 502 isfurther operable to propagate expiration message 480 to members 412 inmember list 426 when dynamic cache application 428 is operating as amaster 410.

Dynamic affiliation portion 504 comprises software and/or hardwareoperable to support the dynamic joining and departure of members 412 andmaster 410 from community 402. Dynamic affiliation portion 504 isfurther operable to generate and respond to various messages andrequests. In particular, dynamic affiliation portion 504 is responsiblefor supporting allow message 424, community request 450, join request452, probe message 456 and add master request 454. Dynamic affiliationportion 504 is further operable to provide a peer list message 520, amember status request 522, a nominate master message 524, an updatemaster request 526, a remove peer message 528, a hold election message530, a location request 550, a location response 554, a probe message456 and a remove master request 527.

Peer list message 520 comprises a data communication to members 412 ofcommunity 402 to update peer list 426 to add or remove peers 413 fromcommunity 402. For example, peer list message 520 may include an updatedpeer list 426 from master 410 for use by members 412. For anotherexample, peer list message 520 may include an instruction to a member412 to add or delete a particular peer 413 from peer list 426.

Member status request 522 comprises data communicated from dynamicaffiliation module 504 at master 410 to a member 412 to determine thestatus of the member 412. More specifically, member status request 522is used by master 410 to determine whether a member 412 has unexpectedlyleft community 402, such as by crashing. In one embodiment, memberstatus request 522 may comprise a “ping” type request, such as one basedon the Internet Control Message Protocol (ICMP) used with the TCP/IPprotocol.

Nominate master message 524 comprises data indicating that a particularpeer 413 should be designated as master 410. Update master request 526comprises data indicating to administration module 474 that communitylist 476 should be updated to indicate that a particular peer 413 orclient 404 has become the master 410 of community 402.

Remove peer message 528 comprises a data message which indicates frommaster 410 to members 412 that a particular member 412 is leavingcommunity 402 and should be removed from peer list 426. Hold electionmessage 530 comprises a data message which indicates that a member 412has detected the possible departure of master 410 from community 402 inthat an election should be held among the remaining members 412 todetermine a new master 410.

Location request 550 comprises a data message which indicates a requestfor the peer 413 which would cache content 460 requested by request 32.Location response 554 comprises a data message which indicates anindication of a peer 413 in community 402 which is responsible forcaching the requested content. Probe message 456 comprises a datamessage which indicates a broadcast and/or multicast request todetermine the existence of one or more communities 402.

Remove master request 527 comprises a data message which indicates arequest by a master 410 that the cache server 406 remove the community402 associated with the master 410. More specifically, remove masterrequest 527 is used by master 410 to indicate the shutdown of a cachecommunity 402.

FIG. 8 is a flow diagram illustrating a method for retrieving andcaching content within community 402. Initially, a request 32 forrequested content 548 is generated by browser 30 in response to, forexample, user input. Request 32 is received at cache portion 500 ofdynamic cache application 428 at member 412A. Cache portion 500 atmember 412A then determines whether the requested content 548 isavailable in cache portion 500 at member 412A. In general, content isconsidered “available” at a particular cache portion 500 when thecontent is stored and unexpired at the particular cache portion 500.Content may be considered unavailable if the content is stored, butmarked as expired, or when the content is not stored at the cacheportion 500. If requested content 548 is available at cache portion 500at member 412A, then cache portion 500 returns requested content 548 tobrowser 30.

If requested content 548 is unavailable at cache portion 500 at member412A, then cache portion 500 at member 412A generates location request550 which is communicated to cache portion 500 at master 410. Cacheportion 500 at master 410 examines allocation list 510 to determinewhich peer 413 would cache the requested content 460.

Cache portion 500 at master 410 determines where the requested content460 is located and generates a location response 554 which iscommunicated to member 412A.

Cache portion 500 at member 412A then receives location response 554 andforwards request 32 to the appropriate peer 413. For example, theappropriate peer 413 may be member 412B. Cache portion 500 at member412B receives request 32 and determines whether the requested content548 is available and current in cache portion 500 at member 412B. If therequested content 548 is available and current in cache portion 500,then the requested content 548 is returned by member 412B to cacheportion 500 at member 412A. Cache portion 500 at member 412A thenprovides requested content 548 to browser 30 for display to a userassociated with member 412A.

If requested content 548 is not available at cache portion 500 at member412B, then member 412B forwards request 32 to origin server 19. Originserver 19 then returns requested content 548 to cache portion 500 atmember 412B. Member 412B then caches requested content 548 at cacheportion 500 and forwards requested content 548 to cache portion 500 atmember 412A. Cache portion 500 at member 412A then communicatesrequested content 548 to browser 30 for display to the user.

FIG. 9 is a flow chart illustrating a method for adding a client 404 tocommunity 402. The method begins at step 600, where client 404 sendscommunity request 450 to administration module 474. Next, at step 602,client 404 determines whether a response has been received fromadministration module 474. More specifically, dynamic cache application428 determines whether a community list 476 has been received from cacheserver 406.

If a response is received from administration module 474, then the YESbranch of decisional step 602 leads to step 604. At step 604, dynamiccache application 428 examines community list 476. Then, at step 606,dynamic cache application 428 attempts to find a community 402 whichcomprises a “best fit” community for client 404 to join. Morespecifically, dynamic cache application 428 may evaluate various factorsassociated with communities 402 to determine which community 402 orcommunity list 476 client 404 should join. For example, dynamic cacheapplication 428 may determine the round trip transmission time betweenclient 404 and community 402. The round trip transmission time may beuseful in determining the overall performance of a community 402 and theperformance of a community 402 with respect to client 404. Proceeding todecisional step 608, dynamic cache application 428 determines whetherany communities 402 meet the best fit criteria. If one or morecommunities 402 meet the best fit criteria, then the YES branch ofdecisional step 608 leads to step 610. At step 610, dynamic cacheapplication 428 sends join request 452 to one of the communities 402which matched the best fit criteria in step 608. The particularcommunity selected by dynamic cache application 428 may comprise thecommunity 402 which most closely met the best fit criteria.Alternatively, dynamic cache application 428 may use other methods forselecting the first community 402 to contact.

Then, at step 612, dynamic cache application 428 at client 404determines whether master 410 has accepted client 404 into community402. Dynamic cache application 428 at client 404 may determine thatmaster 410 has denied client 404 admittance to community 402 byreceiving an allow message 424 indicating that client 404 is not allowedto join community 402 or by receiving no response from master 410 withina predetermined time period. If client 404 receives an allow message 424indicating that client 404 is allowed to join community 402, then theYES branch of decisional step 612 leads to step 614. At step 614, client404 is added to community 402 by master 410 and member list 426 isupdated by master 410.

If master 410 denies client 404 entrance to community 402, then the NObranch of decisional step 612 leads to step 616. At step 616, dynamiccache application 428 at client 404 selects the next community 402 toattempt to join. Also, at step 616, the criteria for the best fit forclient 404 may optionally be modified by dynamic cache application 428so as to change or increase the number of communities 402 that client404 may join. The method then proceeds to step 608 where communities 402and community list 476 are evaluated against the best fit criteria whichmay have changed at step 616.

Returning to decisional step 608, if no communities 402 in communitylist 476 match the best fit criteria for client 404, then the NO branchof decisional step 608 leads to step 618. At step 618, dynamic cacheapplication 428 at client 404 nominates itself as a master 410. Whenclient 404 nominates itself as a master 410, client 404 creates a newcache community 402. Then, at step 620, add master 454 is sent fromclient 404 to administration module 474 at cache server 406. Add master454 indicates to administration module 474 that a new cache community402 is being generated with client 404 as master 410 and that the newcommunity 402 should be added to community list 476.

Returning to decisional step 602, if client 404 does not receive aresponse from administration module 474, then the NO branch ofdecisional step 602 leads to step 622. At step 622, probe message 456 issent from client 404 to a known port to one or more network nodes. Morespecifically, dynamic cache application 428 may be configured to listenat a particular location, such as a transmission controlprotocol/Internet protocol (TCP/IP) port, for clients 404 which wish tojoin community 402. This capability provides, for example, thecapability to add members to a community 402 in the absence of a cacheserver 406 or when cache server 406 cannot be contacted. Proceeding todecisional step 624, if client 402 receives a response to probe message456 from a master 410 and a community 402, then the YES branch ofdecisional 624 leads to step 610 where client 404 will attempt to jointhe responding community 402. If no response is received to probemessage 456, then the NO branch of decisional step 624 leads to step 618and client 404 will attempt to form its own community 402.

FIG. 10 is a flow chart illustrating a method for allowing a client 404to join a cache community 402. The method begins at step 900, where amaster 410 in a community 402 listens for join request 452 from clients404. Next, at step 902, dynamic affiliation portion 504 at master 410evaluates join request 452 to determine whether client 404 will beallowed to join community 402. Master 410 may use any suitable criteriain determining whether to allow client 404 to join community 402, suchas whether community 402 has reached a maximum number of peers 413 andthe roundtrip transmission time between client 404 and community 402.Next, at decisional step 904, master 410 decides whether client 404 isallowed to join community 402. If client 404 is not allowed to joincommunity 402, then the NO branch of decisional step 904 leads to 906where join request 452 is ignored by master 410. Alternatively, master410 may communicate an allow message 424 to client 404 with theindication that client 404 has been denied entry to community 402.

If client 404 is allowed to join community 402, then the YES branch ofdecisional step 904 leads to step 908. At step 908, peer list 426 isupdated to include client 404. Proceeding to step 910, allow message 424is communicated to client 404 along with the updated peer list 426.Then, at step 912, allocation list table 510 is updated to includeclient 404 and community 402. More specifically, the distribution ofcontent 460 to be cached within community 402 is adjusted to include theadditional capacity provided by client 404. Then, at step 914, updatepeer list message 520 is sent to members 412 by master 410 to informmembers 412 to update peer list 426 at each of the members 412 toinclude client 404. The method then returns to step 900 where master 410listens for additional join requests 452.

FIG. 11 is a flow chart illustrating a method for determining whether amember 412 has unexpectedly departed community 402. The method begins atstep 1000, where master 410 sends member status request 522 to aselected member 412. The member 412 to send member status request 522 tomay be determined using any suitable method. For example, master 410 maysequentially traverse peer list 426 and send member status request 522to each member 412 listed in peer list 426. Next, at step 1002, master410 determines whether a response has been received to member statusrequest 522. If a response is received then the YES branch of decisionalstep 1002 leads to step 1004. At step 1004, master 410 resets thetime-out for the member 412 from which the response is received. Morespecifically, master 410 may have a predetermined time interval afterwhich a particular member 412 is contacted again and the countdown tothe expiration of that interval is reset. For example, a member 412 maybe contacted once every minute. If no response is received from member412, then the NO branch of decisional step 1002 leads to step 1006. Atstep 1006, master 410 removes the member 412 which did not respond frompeer list 426. Proceeding to step 1008, master 410 sends update peerlist message 512 with the indication that the non-responding member 412should be removed from the peer list 426 of other members 412. Then, atstep 1010, master 410 updates allocation table 510 to account for theloss of the member 412.

FIG. 12 is a flow chart illustrating a method for removing a member 412from community 402. The method begins at step 1100, where master 410listens for members which wish to leave community 402. Next, at step1102, master 410 receives remove peer message 528. Remove peer message528 indicates that a member 412 wishes to leave community 402. Removepeer message 528 is generated by the member 412 which desires to departcommunity 402 and is communicated to master 410. Then, at step 1104,master 410 removes the departing member 412 from peer list 426.Proceeding to step 1106, master 410 updates allocation table 510 toaccount for the departing member 412. Then, at step 1108, master 410sends update peer list message 520 to the remaining members 412 incommunity 402 to update their peer lists 426 to remove the departingmember 412. The departing member 412 is then removed from community 402and the method returns to step 1100 where master 410 listens for furtherdeparting members.

FIG. 13 is a flow chart illustrating a method for gracefully removingmaster 410 from community 402. The method begins at step 1200 wheremaster 410 determines that it is going to leave community 402. Then, atdecisional step 1201, master 410 determines if it is the only peer 413in community 402. If master 410 is not the only peer 413 in community402, then NO branch of decisional step 1201 leads to step 1202. Next, atstep 1202, master 410 selects a new master from members 412 in peer list426. Master 410 may use any suitable method for determining who the newmaster 410 is to be. For example, master 410 may select the new master410 based on the amount of bandwidth available at a member 412, theprocessing capability of member 412, or other suitable criteria. Then,at step 1204, master 410 removes itself from peer list 426. Proceedingto step 1206, master 410 sends nominate master message 524 to theselected member 412 whose become the new master 410 along with theupdated peer list 426 which no longer includes the old master 410. Then,at decisional step 1208, the old master determines whether a responsehas been received from member 412 which is to become the new master 410.If no response is received from the member 412 which is to become thenew master, then the NO branch of decisional step 1208 returns to step1202 where the current master 410 will select a new master 410 from theother members 412 of community 402. If a response is received frommember 412 which is to become the new master 410 then the YES branch ofdecisional step 1208 leads to step 1210. At step 1210, the existingmaster 410 shuts itself down. Next, at step 1212, the member 412 whichwas selected as the new master 410 becomes the master 410 and sendsupdate peer list message 520 to the remaining members 412 of community402. The update peer list message 520 indicates that the remainingmembers 412 of community 402 should update their peer lists 426 toindicate that the old master 410 is no longer in community 402 and thatthe new master 410 is the present master 410. Proceeding to step 1214,the new master 410 sends update master request 526 to cache server 406.Update master request 526 indicates to cache server 406 andadministration module 474 that community list 476 should be updated toindicate that the new master 410 is the master for community 402.

Returning to decisional step 1201, if master 410 determines that it isthe only peer 413 in community 402, then YES branch of decisional step1201 leads to step 1220. At step 1220, master 410 sends remove masterrequest 527 to cache server 406. Cache server 406 then removes community402 associated with master 410. Master 410 then shuts down. The methodthen ends.

FIG. 14 is a flow chart illustrating a method for allowing a master 410to unexpectedly depart community 402. The method begins at step 1300,where a member 412 determines how much time has elapsed since the lastmember status request 522 was received by member 412. Then, atdecisional step 1302, member 412 determines whether the time since thelast member status request 522 was received at member 412 exceeds apredetermined threshold. For example, the predetermined threshold may beone minute since the last member status request 522 was received. If thetime since the last member status request 522 was received does notexceed the predetermined threshold, then the NO branch of decisionalstep 1302 returns to step 1300 where member 412 checks the elapsed timeagain.

If the elapsed time exceeds the predetermined threshold, then the YESbranch of decisional step 1302 leads to step 1304. At step 1304, member412 generates hold election message 530 and communicates hold electionmessage to members 412 in peer list 426. Member 412 generates holdelection message 530 to inform other members 412 in community 402 thatmaster 410 may have shut down and that an election for a new master 410should be held. Proceeding to step 1306, member 412 which generated holdelection message 530 may receive one or more responses from members 412and master 410 in community 402. Then, at step 1308, member 412 whichgenerated hold election message 530 determines whether any response hasbeen received from master 410. if master 410 has responded to holdelection message 530, then the YES branch of decisional step 1308 leadsto step 1310 where member 412 aborts the attempt to elect a new master410. Master 410 may respond because master 410 is still operating andwas only temporarily unable to generate a member status request 522 formember 412 which generated hold election message 530. If master 410 wasonly temporarily unavailable, then it is unnecessary for a new master410 to be elected for community 402.

If no master 410 responds in step 1308, then the NO branch decisionalstep 1308 leads to step 1312. At step 1312, member 412 generates a newpeer list 426 based on responses from members 412 received in step 1306.A new peer list 426 may be generated so as to determine the remainingmembers of community 402. For example, a communications link connectingmaster 410 and one or more members 412 to other members 412 in community402 may unexpectedly shut down. The unexpected loss of a communicationslink may force community 402 to divide into two separate communities 402and result in the election of a new master 410 for one of the two newcommunities 402. Then, at step 1314, a new master 410 is selected fromthe remaining peers in 413 in the newly generated peer list 426 fromstep 1312. The new master 410 may be selected in any suitable manner,such as by selecting member 412 which detected that master 410 hadceased to respond. Next, at step 1316, the nominate master message 524is communicated to member 412 which has been selected to be the newmaster 410 in step 1314 along with the newly generated peer list 426.Nominate master message 524 is generated by member 412 which originallydetected that master 410 had ceased to respond in step 1302. Then, atdecisional step 318, member 412 which originally detected that master410 had ceased to respond determines whether the responses received fromthe newly nominated master. If no response is received from the newlynominated master, then the NO branch decisional step 1318 returns tostep 1314 where another new master is selected from the remainingmembers 412. If a response is received then the YES branch decisionalstep 1318 leads to step 1320. At step 1320, the newly nominated master410 sends update master request 526 to cache server 406 to updatecommunity list 476. The method then ends.

In one embodiment, dynamic affiliation portion 504 supports the additionand removal of members 412 and master 410 using the Dynamic ReefProtocol (DRP). In the DRP, community request 450 comprises aCRMSG_WAKEUP data message, add master request 454 comprises aCRMSG_ADDMASTER data message, update master request 526 comprises aCRMSG_REPLACEMASTER data message, remove master request 527 comprises aCRMSG_REMOVEMASTER data message, join request 452 comprises aCRMSG_REQUESTTOJOIN data message, nominate master message 524 comprisesa CRMSG_NOMINATEMASTER data message, update peer list message 520comprises a CRMSG_UPDATEPEERLIST data message, remove peer message 528comprises a CRMSG_REMOVEPEER data message, hold election message 530comprises a CRMSG_HOLDELECTION data message, and member status request522 comprises a CRMSG_PEERPING data message. In addition, probe message456 may use the CRMSG_WAKEUP data message. The DRP data messages may beorganized using any suitable format. For example, a bit pattern may beused in a type field of a data message to indicate the type of datamessage being sent. For another example, the DRP may be built on top ofor as part of the ICSP protocol.

By providing the capability to cache data in a cache community, system400 provides the ability to cache large amounts of content to the user.Traditionally, caching of Internet content has been done only at anindividual user's computer. This provides the benefits of caching dataonly after the user has retrieved the data from a remote web server. Byproviding the capability for computers to join a cache community,content stored in the cache community can be quickly provided to themembers without having to retrieve the content from an origin serverover a possibly slow Internet. As the use of high-speed connections tothe Internet, such as Digital Subscriber Line (DSL) and cable modemtechnologies, increases, the increased responsiveness of a cachecommunity using high-speed connections may be significant in comparisonto the responsiveness of the Internet in general.

In addition, traditional distributed caching solutions have used static,predefined groups cache servers. In contrast, system 400 provides thecapability to dynamically add and remove members from a distributedcaching community. By allowing dynamic addition and subtraction ofmembers from a distributed caching community, a distributed cachingsystem is supported which does not require a centralized administrator.Also, system 400 supports creating a distributed caching system withheterogeneous computers that may be added and removed from the cachingcommunity in a dynamic manner.

Other changes, substitutions and alterations are also possible withoutdeparting from the spirit and scope of the present invention, as definedby the following claims.

1. A method for establishing a community cache, comprising: initiating aparticular cache module; generating a cache status message at theparticular cache module, the cache status message operable to indicatethat the particular cache module desires to establish a cache community;broadcasting the cache status message to other cache modules;negotiating distribution of content among all of the cache modules;updating location tables at each cache module according to thenegotiated distribution; caching content according to the negotiateddistribution.
 2. The method of claim 1, further comprising: accumulatingdata associated with requests for content; renegotiating distribution ofcontent in response to the accumulated data.
 3. The method of claim 1,further comprising: receiving a deactivation indication from theparticular one of the cache modules; renegotiating distribution ofcontent in response to the deactivation indication.
 4. The method ofclaim 1, further comprising: receiving a cache status message from a newcache module desiring to join the cache community; renegotiatingdistribution of content in response to the new cache module desiring tojoin the cache community.
 5. The method of claim 1, further comprising:negotiating one or more layers of content distribution.
 6. The method ofclaim 5, wherein a particular one of the layers of content distributiontakes into account a failure of the particular cache module.
 7. Themethod of claim 1, further comprising: determining whether particularcontent is to be cached in the cache community.
 8. The method of claim1, further comprising: assigning the particular one of the plurality ofcaches as the master of the cache community, the master operable tocontrol entering and exiting of the cache community by cache modules. 9.The method of claim 1, further comprising: identifying a cache communitythat provides a best fit criteria for the particular one of theplurality of caches.
 10. The method of claim 9, further comprising:identifying a cache community that provides a next best fit criteria inresponse to the cache community with the best fir criteria not acceptingthe particular one of the plurality of cache modules.
 11. A system forestablishing a community cache, comprising: means for initiating aparticular cache module; means for generating a cache status message atthe particular cache module, the cache status message operable toindicate that the particular cache module desires to establish a cachecommunity; means for broadcasting the cache status message to othercache modules; means for negotiating distribution of content among allof the cache modules; means for updating location tables at each cachemodule according to the negotiated distribution; means for cachingcontent according to the negotiated distribution.
 12. The system ofclaim 11, further comprising: means for accumulating data associatedwith requests for content; means for renegotiating distribution ofcontent in response to the accumulated data.
 13. The system of claim 11,further comprising: means for receiving a deactivation indication fromthe particular one of the cache modules; means for renegotiatingdistribution of content in response to the deactivation indication. 14.The system of claim 11, further comprising: means for receiving a cachestatus message from a new cache module desiring to join the cachecommunity; means for renegotiating distribution of content in responseto the new cache module desiring to join the cache community.
 15. Themethod of claim 11, further comprising: means for negotiating one ormore layers of content distribution.
 16. A computer readable mediumincluding code for establishing a community cache, the code operable to:initiate a particular cache module; generate a cache status message atthe particular cache module, the cache status message operable toindicate that the particular cache module desires to establish a cachecommunity; broadcast the cache status message to other cache modules;negotiate distribution of content among all of the cache modules; updatelocation tables at each cache module according to the negotiateddistribution; cache content according to the negotiated distribution.17. The computer readable medium of claim 1, wherein the code is furtheroperable to: accumulate data associated with requests for content;renegotiate distribution of content in response to the accumulated data.18. The computer readable medium of claim 16, wherein the code isfurther operable to: receive a deactivation indication from theparticular one of the cache modules; renegotiate distribution of contentin response to the deactivation indication.
 19. The computer readablemedium of claim 16, wherein the code is further operable to: receive acache status message from a new cache module desiring to join the cachecommunity; renegotiate distribution of content in response to the newcache module desiring to join the cache community.
 20. The computerreadable medium of claim 16, wherein the code is further operable to:negotiate one or more layers of content distribution.